/* Die Klasse Rechte ist eine abstrakte Klasse, die die Basis fuer
 * saemtliche Rechte bietet, die im System vergeben werden koennen 
 * 
 * Datei: Rechte.java       			     Autor:   Antonia Wagner 
 * Datum: 05.11.11                     Version: 0.3 
 * 
 * Historie: 05.11.11 v0.1 von Autor erstellt, alle spezifizierten
 *                    Methoden implementiert
 *           20.11.11 v0.2 Konstanten erstellt
 *           29.11.11 v0.3 Variablen ergaenzt, Get- und Set-Methoden
 *                         eingefuegt
 * 
 */

package personenverwaltung;

public abstract class Rechte
{

  protected static final int MAX_AUSLEIHDAUER_MINDERJAEHRIG = 14;
  protected static final int MAX_AUSLEIHDAUER_STANDARD = 14;
  protected static final int MAX_AUSLEIHDAUER_STUDENT = 28;
  protected static final int MAX_AUSLEIHDAUER_MITARBEITER = 30;
  protected static final int MAX_AUSLEIHDAUER_ADMINISTRATOR = 30;

  protected boolean darfAusleihen = false;
  protected boolean darfReservieren = false;
  protected boolean darfMediumAnsehen = false;
  protected boolean darfMediumBearbeiten = false;
  protected boolean darfMediumHinzufuegen = false;
  protected boolean darfMediumLoeschen = false;
  protected boolean darfPersonAnsehen = false;
  protected boolean darfPersonBearbeiten = false;
  protected boolean darfPersonHinzufuegen = false;
  protected boolean darfPersonLoeschen = false;
  protected boolean darfRechteVeraendern = false;
  protected boolean darfStatistikAnsehen = false;
  protected boolean darfBibVisVerwalten = false;
  protected boolean darfMahngebuehrKassieren = false;


  /**
   * @return einene Wert, ob diese Person ausleihen darf oder nicht
   */
  public boolean darfAusleihen ()
  {
    return darfAusleihen;
  }


  /**
   * 
   * @return einene Wert, ob diese Person reservieren darf oder nicht
   */
  public boolean darfReservieren ()
  {
    return darfReservieren;
  }


  /**
   * 
   * @param e
   *          das Elementarrecht, das abgefragt werden soll
   * @return einene Wert, ob diese Person das eingegebene Elementarrecht
   *         bei einem Medium besitzt oder nicht
   */
  public boolean darfMedium (Elementarrecht e)
  {
    switch (e)
    {
    case ANSEHEN:
      return darfMediumAnsehen;
    case BEARBEITEN:
      return darfMediumBearbeiten;
    case HINZUFUEGEN:
      return darfMediumHinzufuegen;
    case LOESCHEN:
      return darfMediumLoeschen;
    default:
      return (Boolean) null;
    }
  }


  /**
   * 
   * @param e
   *          das Elementarrecht, das abgefragt werden soll
   * @return einene Wert, ob diese Person das eingegebene Elementarrecht
   *         bei einer Person besitzt oder nicht
   */
  public boolean darfPerson (Elementarrecht e)
  {
    switch (e)
    {
    case ANSEHEN:
      return darfPersonAnsehen;
    case BEARBEITEN:
      return darfPersonBearbeiten;
    case HINZUFUEGEN:
      return darfPersonHinzufuegen;
    case LOESCHEN:
      return darfPersonLoeschen;
    default:
      return (Boolean) null;
    }
  }


  /**
   * 
   * @return die Anzahl an Tagen, wie lange diese Person ein Medium
   *         ausleihen darf
   */
  public int gibAusleihdauer ()
  {
    return MAX_AUSLEIHDAUER_STANDARD;
  }


  /**
   * 
   * @return die Anzahl an Tagen, wie lange diese Person ein Medium nach
   *         Verlaengerung noch behalten darf
   */
  public int gibVerlaengerungsdauer ()
  {
    return MAX_AUSLEIHDAUER_STANDARD;
  }


  /**
   * 
   * @return einen bool-Wert, ob diese Person die Rechte bei anderen
   *         Personen veraendern darf
   */
  public boolean darfRechteVeraendern ()
  {
    return darfRechteVeraendern;
  }


  /**
   * 
   * @return einen bool-Wert, ob diese Person das Recht hat, die
   *         Statistiken anzusehen
   */
  public boolean darfStatistikAnsehen ()
  {
    return darfStatistikAnsehen;
  }


  /**
   * 
   * @return einen bool-Wert, ob diese Person die Visualisierung der
   *         Bibliothek verwalten darf
   */
  public boolean darfBibVisVerwalten ()
  {
    return darfBibVisVerwalten;
  }


  /**
   * 
   * @param berechtigung
   *          setzt die Erlaubnis oder das Verbot, Medien auszuleihen
   */
  public void setzAusleihberechtigung (boolean berechtigung)
  {
    darfAusleihen = berechtigung;
  }


  /**
   * 
   * @param berechtigung
   *          setzt die Erlaubnis oder das Verbot, Medien zu reservieren
   */
  public void setzeReservierungsberechtigung (boolean berechtigung)
  {
    darfReservieren = berechtigung;
  }


  /**
   * 
   * @param e
   *          das Recht, das gesetzt werden soll
   * @param berechtigung
   *          die gesetzt werden soll
   */
  public void setzeMedienRecht (Elementarrecht e, boolean berechtigung)
  {
    switch (e)
    {
    case ANSEHEN:
      darfMediumAnsehen = berechtigung;
      break;
    case BEARBEITEN:
      darfMediumBearbeiten = berechtigung;
      break;
    case HINZUFUEGEN:
      darfMediumHinzufuegen = berechtigung;
      break;
    case LOESCHEN:
      darfMediumLoeschen = berechtigung;
      break;
    default:
    }
  }


  /**
   * 
   * @param e
   *          das Recht, das gesetzt werden soll
   * @param berechtigung
   *          die gesetzt werden soll
   */
  public void
      setzePersonenRecht (Elementarrecht e, boolean berechtigung)
  {
    switch (e)
    {
    case ANSEHEN:
      darfPersonAnsehen = berechtigung;
      break;
    case BEARBEITEN:
      darfPersonBearbeiten = berechtigung;
      break;
    case HINZUFUEGEN:
      darfPersonHinzufuegen = berechtigung;
      break;
    case LOESCHEN:
      darfPersonLoeschen = berechtigung;
      break;
    default:
    }
  }


  /**
   * 
   * @param berechtigung
   *          die gesetzt werden soll
   */
  public void setzeVeraenderungsRecht (boolean berechtigung)
  {
    darfRechteVeraendern = berechtigung;
  }


  /**
   * 
   * @param berechtigung
   *          die gesetzt werden soll
   */
  public void setzeStatistikBetrachtungsRecht (boolean berechtigung)
  {
    darfStatistikAnsehen = berechtigung;
  }


  /**
   * 
   * @param berechtigung
   *          die gesetzt werden soll
   */
  public void setzeBibVisVerwaltungsRecht (boolean berechtigung)
  {
    darfBibVisVerwalten = berechtigung;
  }


  /**
   * 
   * @return ob der Benutzer Mahngebuehren kassieren darf
   */
  public boolean darfMahngebuehrKassieren ()
  {
    return darfMahngebuehrKassieren;
  }


  /**
   * 
   * @param berechtigung
   *          die gesetzt werden soll
   */
  public void setzeMahngebuehrKassierungsRecht (boolean berechtigung)
  {
    darfMahngebuehrKassieren = berechtigung;
  }


  /**
   * @return Der Name des Rechts
   */
  public String toString ()
  {
    return "Recht";
  }

}
